Use of network data communications for commercial and non-commercial applications continues to grow at an extremely rapid pace. This growth in the use of data communications is a driving factor for the development and implementation of data networks that provide increased bandwidth and reliability in order to meet the ever growing demand of consumers (commercial and non-commercial) for such data communication services.
One approach that is used to provide such high-bandwidth data communication and reliable data communication services is the use of aggregation groups for communicating data between nodes (network devices) in data networks. For instance, an aggregation group may be implemented using multiple data communication links between two network devices on a data network where the members of the aggregation group function together to communicate data between the two network devices. Such network devices may be directly connected, or may be connected through additional network devices. Depending on the direction of data being communicated between such devices, one device may operate as a data source and one device may operate as a data destination. The data communication links of an aggregation group (the members) between the source and destination devices may take the form of physical links or, alternatively, may take the form of virtual links. Virtual links, as the term indicates, may be implemented by defining a plurality of logical links. The plurality of logical links may then be implemented using one or more physical links, depending on the particular embodiment. The multiple data communication links/paths (whether physical or virtual links) may provide for increased aggregate bandwidth (e.g., for an aggregation group as compared to a single member of the aggregation group) and may also provide for improved reliability as such aggregation groups provide multiple communication links/paths between a source and destination.
Aggregation groups may be implemented in a number of fashions. For instance, an aggregation group may be implemented using Layer-3 (L3) Equal Cost Multi-Path (ECMP) techniques. Alternatively, an aggregation group may be implemented as a link aggregation group (LAG) in accordance with the Institute of Electrical and Electronics Engineers (IEEE) 802.3ad standard. As yet another alternative, an aggregation group may be implemented as a Hi-Gig trunk (e.g., using four 2.5 gigabit-per-second (Gbps) data traffic links to form a 10 Gbps trunk). Of course, other approaches for implementing an aggregation group may be used.
In order to assign data flows to the members of an aggregation group, hash-based load balancing techniques are used to assign each data flow that is processed by a network device to a respective member of the aggregation group (e.g., one of the individual physical or virtual links). A data flow may be defined in a number of ways. For instance, a data flow may be defined as a flow that includes data packets that are associated with an individual application and/or user, which may be referred to as a micro-flow. Alternatively, a data flow may be defined as a flow that includes packets from different micro-flows that hash to the same value. Such a data flow may be termed a macro-flow. Accordingly, macro-flows may include multiple micro-flows. For purposes of clarity, the term “flow” or “data flow,” as used herein, may refer to any data flow (e.g., micro-flows or macro-flows) where packets included in the flow have a common set of packet fields and, therefore, hash to the same value using those common values to generate hash values, even if the packets in a data flow are not associated with a single user or single application. Such packet fields may include, for example, a source address, a destination address, a packet priority (such as indicated in respective p-bits of the packets), a protocol identifier, among a number of other characteristics.
Using hash based load-balancing, a fixed set of packet fields may be defined for use in member assignment. When a packet arrives, the packet may indicate an aggregation group that is to be used to communicate the packet. A hash value is then generated based on the values of the fixed set of fields in each of the packets (e.g., using an XOR hash or a cyclic redundancy check (CRC) hash). A member of the aggregation group indicated in the packet is then assigned based on the hash value using a mathematical transformation of the hash value. For instance, a modulo operation may be performed on the hash value, such as, Hash Value mod k, where k is the number of members of the designated aggregation group.
While such hash based approaches may provide for random statistical distribution of flows across aggregate members, such approaches have certain drawbacks. For instance, if there are large differences in the amount data being communicated in a flow or flows that are assigned to one aggregate member as compared to the amount of data being communicated by a flow or flows that are assigned to another aggregate member, this situation may result in a significant imbalance in the amount of data traffic being communicated by members of an aggregation group. Such imbalances may result in data congestion, packets being dropped and, therefore, inefficient use of available bandwidth. For instance, one member of an aggregation group could be oversubscribed (receive more data than it can transmit in a give time) while other members of the aggregation group are idle or carry very little data traffic.